package com.zenithmind.coding.service;

import com.zenithmind.coding.mapper.ProblemStatisticsMapper.ProblemStatistics;
import com.zenithmind.coding.mapper.ProblemStatisticsMapper.TagStatistics;
import com.zenithmind.coding.mapper.ProblemStatisticsMapper.UserSolveStatistics;

import java.util.List;

/**
 * 问题统计服务接口 - 遵循接口隔离原则，专门处理问题统计相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ProblemStatisticsService {

    /**
     * 获取问题统计信息
     * 
     * @param categoryId 分类ID
     * @param difficulty 难度等级
     * @return 统计信息
     */
    ProblemStatistics getProblemStatistics(String categoryId, Integer difficulty);

    /**
     * 获取热门标签
     * 
     * @param limit 限制数量
     * @return 标签列表
     */
    List<TagStatistics> getHotTags(Integer limit);

    /**
     * 获取用户解题统计
     * 
     * @param userId 用户ID
     * @return 解题统计
     */
    UserSolveStatistics getUserSolveStatistics(String userId);

    /**
     * 获取难度分布
     * 
     * @param categoryId 分类ID
     * @return 难度分布
     */
    Object getDifficultyDistribution(String categoryId);

    /**
     * 获取类型分布
     * 
     * @param categoryId 分类ID
     * @return 类型分布
     */
    Object getTypeDistribution(String categoryId);

    /**
     * 获取提交趋势
     * 
     * @param days 天数
     * @param problemId 问题ID
     * @return 提交趋势
     */
    Object getSubmissionTrend(Integer days, String problemId);

    /**
     * 获取通过率统计
     * 
     * @param categoryId 分类ID
     * @param difficulty 难度等级
     * @return 通过率统计
     */
    Object getAcceptanceRateStatistics(String categoryId, Integer difficulty);

    /**
     * 获取排行榜
     * 
     * @param type 排行榜类型
     * @param limit 限制数量
     * @return 排行榜
     */
    Object getLeaderboard(String type, Integer limit);

    /**
     * 获取用户活跃度统计
     * 
     * @param userId 用户ID
     * @param days 天数
     * @return 活跃度统计
     */
    Object getUserActivityStatistics(String userId, Integer days);

    /**
     * 获取用户学习进度
     * 
     * @param userId 用户ID
     * @param categoryId 分类ID
     * @return 学习进度
     */
    Object getUserLearningProgress(String userId, String categoryId);

    /**
     * 获取用户能力雷达图
     * 
     * @param userId 用户ID
     * @return 能力雷达图
     */
    Object getUserAbilityRadar(String userId);

    /**
     * 获取用户成长曲线
     * 
     * @param userId 用户ID
     * @param days 天数
     * @return 成长曲线
     */
    Object getUserGrowthCurve(String userId, Integer days);

    /**
     * 获取全局统计
     * 
     * @return 全局统计
     */
    Object getGlobalStatistics();

    /**
     * 更新问题统计信息
     * 
     * @param problemId 问题ID
     * @param submitCount 提交次数增量
     * @param acceptCount 通过次数增量
     * @return 是否成功
     */
    Boolean updateProblemStatistics(String problemId, Long submitCount, Long acceptCount);

    /**
     * 更新问题平均性能
     * 
     * @param problemId 问题ID
     * @param avgTime 平均用时
     * @param avgMemory 平均内存
     * @return 是否成功
     */
    Boolean updateProblemAvgPerformance(String problemId, Integer avgTime, Integer avgMemory);
}
